home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / tests / matnew.dia.ref < prev    next >
Text File  |  1999-09-16  |  3KB  |  192 lines

  1.  
  2. eps=200000*%eps;
  3.  
  4. //      controlability...
  5.  
  6. a=[rand(3,3),rand(3,2);0*ones(2,3),rand(2,2)];b=[rand(3,2);0*ones(2,2)];
  7.  
  8. t=rand(5,5);a=inv(t)*a*t;b=inv(t)*b;
  9.  
  10. [m,t]=contr(a,b);m-3
  11.  ans  =
  12.  
  13.     0.  
  14.  
  15. if m-3<>0 then bugmes();quit;end
  16.  
  17. v=t(:,1:3);u=t(:,4:5);x=u'*a*v;
  18.  
  19. if norm(x)>eps then bugmes();quit;end
  20.  
  21. //invariants zeros
  22.  
  23. a=rand(3,3);b=rand(3,2);c=rand(2,3);d=rand(2,2);
  24.  
  25. [al,be]=trzeros(syslin('c',a,b,c,d));
  26.  
  27. u=spec(a-b*inv(d)*c);
  28.  
  29. x=sum(u)-sum(al./be);
  30.  
  31. if norm(x)>eps then bugmes();quit;end
  32.  
  33. [al,be]=tr_zer(a,b,c,0*d);
  34.  
  35. u=al./be;
  36.  
  37. v=spec(a-10000000*b*c);[x,k]=mini(abs(v));
  38.  
  39. if norm(v(k)-u) > 1.e-7 then bugmes();quit;end
  40.  
  41. //       placement poles
  42.  
  43. // mono input
  44.  
  45. a=rand(5,5);b=rand(5,1);pls=[1,2,3,%i,-%i];
  46.  
  47. k=ppol(a,b,pls);
  48.  
  49. x=poly(pls,'z')-poly(a-b*k,'z');
  50.  
  51. if norm(coeff(x))>100*eps then bugmes();quit;end
  52.  
  53. // multi_input
  54.  
  55. b=rand(5,2);k=ppol(a,b,pls);
  56.  
  57. x=poly(pls,'z')-poly(a-b*k,'z');
  58.  
  59. if norm(coeff(x))>100*eps then bugmes();quit;end
  60.  
  61. //
  62.  
  63. //    rtitr
  64.  
  65. //==============
  66.  
  67. //
  68.  
  69. //siso
  70.  
  71. //----
  72.  
  73. //
  74.  
  75. //causal
  76.  
  77. //n1 scalar
  78.  
  79. n1=1;d1=poly([1 1],'s','c');       // yj=y(j-1)+u(j-1)
  80.  
  81. r1=[0 1 0 1 0 1 0 1 0 1 0];
  82.  
  83. r=rtitr(n1,d1,ones(1,10));if norm(r1-r)>eps then bugmes();quit;end
  84.  
  85. //hot
  86.  
  87. r=rtitr(n1,d1,ones(1,9),1,0);if norm(r1(2:11)-r)>eps then bugmes();quit;end
  88.  
  89. //n1 polynomial
  90.  
  91. n1=poly(1,'s','c');
  92.  
  93. r=rtitr(n1,d1,ones(1,10));if norm(r1-r)>eps then bugmes();quit;end
  94.  
  95. //hot
  96.  
  97. r=rtitr(n1,d1,ones(1,9),1,0);if norm(r1(2:11)-r)>eps then bugmes();quit;end
  98.  
  99. //
  100.  
  101. //non causal
  102.  
  103. n2=poly([1 1 1],'s','c');d2=d1;    // yj=-y(j-1)+u(j-1)+u(j)+u(j+1)
  104.  
  105. r2=[2 1 2 1 2 1 2 1 2];
  106.  
  107. r=rtitr(n2,d2,ones(1,10));if norm(r-r2)>eps then bugmes();quit;end
  108.  
  109. //hot
  110.  
  111. r=rtitr(n2,d2,ones(1,9),1,2);if norm(r2(2:9)-r)>eps then bugmes();quit;end
  112.  
  113. //
  114.  
  115. //mimo
  116.  
  117. //----
  118.  
  119. //
  120.  
  121. //causal
  122.  
  123. d1=d1*diag([1 0.5]);n1=[1 3 1;2 4 1];r1=[5;14]*r1;
  124.  
  125. r=rtitr(n1,d1,ones(3,10));if norm(r1-r)>eps then bugmes();quit;end
  126.  
  127. //
  128.  
  129. r=rtitr(n1,d1,ones(3,9),[1;1;1],[0;0]);
  130.  
  131. if norm(r1(:,2:11)-r)>eps then bugmes();quit;end
  132.  
  133. //n1 polynomial
  134.  
  135. n1(1,1)=poly(1,'s','c');
  136.  
  137. r=rtitr(n1,d1,ones(3,10));if norm(r1-r)>eps then bugmes();quit;end
  138.  
  139. //
  140.  
  141. r=rtitr(n1,d1,ones(3,9),[1;1;1],[0;0]);
  142.  
  143. if norm(r1(:,2:11)-r)>eps then bugmes();quit;end
  144.  
  145. //non causal
  146.  
  147. d2=d1;n2=n2*n1;r2=[5;14]*r2;
  148.  
  149. r=rtitr(n2,d2,ones(3,10));if norm(r2-r)>eps then bugmes();quit;end
  150.  
  151. //
  152.  
  153. r=rtitr(n2,d2,ones(3,9),[1;1;1],[10;28]);
  154.  
  155. if norm(r2(:,2:9)-r)>eps then bugmes();quit;end
  156.  
  157. //
  158.  
  159. //
  160.  
  161. a = [0.21 , 0.63 , 0.56 , 0.23 , 0.31
  162.      0.76 , 0.85 , 0.66 , 0.23 , 0.93
  163.      0 , 0.69 , 0.73 , 0.22 , 0.21
  164.      0.33 , 0.88 , 0.2 , 0.88 , 0.31
  165.      0.67 , 0.07 , 0.54 , 0.65 , 0.36];
  166.  
  167. b = [0.29 , 0.5 , 0.92
  168.      0.57 , 0.44 , 0.04
  169.      0.48 , 0.27 , 0.48
  170.      0.33 , 0.63 , 0.26
  171.      0.59 , 0.41 , 0.41];
  172.  
  173. c = [0.28 , 0.78 , 0.11 , 0.15 , 0.84
  174.      0.13 , 0.21 , 0.69 , 0.7 , 0.41];
  175.  
  176. d = [0.41 , 0.11 , 0.56
  177.      0.88 , 0.2 , 0.59];
  178.  
  179. s=syslin('d',a,b,c,d);
  180.  
  181. h=ss2tf(s);num=h(2);den=h(3);den=den(1,1)*eye(2,2);
  182.  
  183. u=1;u(3,10)=0;
  184.  
  185. r3=flts(u,s);
  186.  
  187. r=rtitr(num,den,u);if norm(r3-r)>1000*eps then bugmes();quit;end
  188.  
  189. //
  190.  
  191.  
  192.